package com.beiding.jsonanalyzer.analyze;

import com.beiding.jsonanalyzer.Analyzer;
import com.beiding.jsonanalyzer.Key;
import com.beiding.jsonanalyzer.analyze.func.FuncBase;

public class ValueUtils {

    /**
     * 执行表达式并获取执行结果
     *
     * @param context      值持有者(执行上下文)
     * @param exp          表达式
     * @param expectedType 期望的类型
     * @return 执行的结果
     */
    public static Object execExpression(Object context, Object exp, Class expectedType) {

        //如果是Key类型,则获取Key
        if (exp instanceof Key) {
            if (Analyzer.hasKey(context, exp)) {
                return Analyzer.get(context, exp, expectedType);
            } else {
                return Undefind.i;
            }
        } else
            //如果是值表达式,则执行表达式
            if (exp instanceof FuncBase) {
                return ((FuncBase) exp).executeOne(new NodeContext(context));
            }

        //否则返回表达式本身
        return exp;
    }


}
